package com.ms.demo;

import com.ms.demo.factory1.Shape;
import com.ms.demo.factory2.Color;

/**
 * @description: 测试main方法
 * @author: ms
 * @create: 2022-10-21 17:01
 *
 * 我们将创建 Shape 和 Color 接口和实现这些接口的实体类。下一步是创建抽象工厂类 AbstractFactory。接着定义工厂类 ShapeFactory 和 ColorFactory，这两个工厂类都是扩展了 AbstractFactory。
 * 然后创建一个工厂创造器/生成器类 FactoryProducer。
 * AbstractFactoryPatternDemo 类使用 FactoryProducer 来获取 AbstractFactory 对象。
 * 它将向 AbstractFactory 传递形状信息 Shape（CIRCLE / RECTANGLE / SQUARE），以便获取它所需对象的类型。同时它还向 AbstractFactory 传递颜色信息 Color（RED / GREEN / BLUE），以便获取它所需对象的类型。
 */
public class TestMain {

    public static void main(String[] args) {
        //获取形状工厂
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

        //获取形状为 Circle 的对象
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();

        //获取形状为 Rectangle 的对象
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();

        //获取形状为 Square 的对象
        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();

        //-----------------------------------------------------------------------------

        //获取颜色工厂
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
        //获取颜色为 Red 的对象
        Color color1 = colorFactory.getColor("RED");
        color1.setColor();

        //获取颜色为 Green 的对象
        Color color2 = colorFactory.getColor("GREEN");
        color2.setColor();

        //获取颜色为 Blue 的对象
        Color color3 = colorFactory.getColor("BLUE");
        color3.setColor();
    }
}